// .catch
// .all
// .then

// 类 : Promise  实例 : new Promise()
// allSettled
// all
// race
// reject
// resolve

// 实例
// catch: ƒ catch()
// finally: ƒ finally()
// then: ƒ then()

// 三个请求同时进行，三个请求都完成后，再执行then
// 三个请求找到最快的那个，执行then
// 三个请求有一个失败了 不影响另外两个的结果

// 类的api
// Promise.all : 所有的请求都完成后，执行then 返回值是一个Promise实例
// 请求的过程是并发的  并发: 同时进行的  , 只要有一个失败了，就会失败

// Promise.race 关心谁请求最快 不关心到底成功还是失败

// Promise.allSettled : 不论成功还是失败 都会有返回结果 走then
function myPromise1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("1");
    }, 3000);
  });
}

function myPromise2() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject("2");
    }, 3000);
  });
}

function myPromise3() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("3");
    }, 2000);
  });
}

// function myPromise4() {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {

//     }, 2000);
//   });
// }
Promise.allSettled([
  myPromise1(),
  myPromise2(),
  myPromise3(),
  // myPromise4(),
]).then((res) => {
  console.log(res); // 1. 所有的结果 2. 部分的结果 3. 某一个的结果
});

// 5s内得不到结果就失败

// 优化 : Promise.race
function request() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      reject("失败");
    }, 5000);
    setTimeout(() => {
      resolve("成功");
    }, 6000);
  });
}
request()
  .then((res) => console.log(res))
  .catch((err) => console.log(err));
